#pragma once
#include<iostream>

using namespace std;

class Task
{

public:
    Task(){}
    Task(int x,int y,char op)
    :_x(x),_y(y),_op(op),_result(0),_exitcode(0)
    {
    }

    void operator()()
    {
        switch(_op)
        {
        case '+':
            _result = _x + _y;
            break;
        case '-':
            _result = _x - _y;
            break;
        case '*':
            _result = _x * _y;
            break;
        case '/':
            if(_y == 0)
            {
                _exitcode = -1;
            }
            else
            _result = _x / _y;
            break;
        case '%':
            if(_y == 0)
            {
                _exitcode = -2;
            }
            else
            _result = _x % _y;
            break;
        default:
            break;
        }
    }

    void display_result()
    {
        cout<<"consumer: "<<_x<<_op<<_y<<"="<<_result<<" ("<<_exitcode<<")"<<endl;
    }

    void display_question()
    {
        cout<<"productor: "<<_x<<_op<<_y<<"=?"<<" ("<<_exitcode<<")"<<endl;
    }

    ~Task(){}

private:
    int _x;
    int _y;
    char _op;

    int _result;
    int _exitcode;

};